package com.bot.nft.module.op.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bot.auth.core.pojo.SaBaseClientLoginUser;
import com.bot.auth.core.util.StpClientLoginUserUtil;
import com.bot.common.pojo.CommonResult;
import com.bot.nft.module.dc.domain.bo.DcNftCertBo;
import com.bot.nft.module.dc.domain.vo.DcNftCertVo;
import com.bot.nft.module.op.domain.bo.OpTreChestInfoBo;
import com.bot.nft.module.op.domain.bo.PageBo;
import com.bot.nft.module.op.domain.vo.OpTreChestInfoVo;
import com.bot.nft.module.op.domain.vo.OpTreChestLogVo;
import com.bot.nft.module.op.domain.vo.OpTreChestOpRemarkVo;
import com.bot.nft.module.op.service.IOpTreChestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 描述:
 * 时间: 2023-12-02 16:52
 * 负责人: 王康
 **/

@CrossOrigin
@RestController
@RequestMapping("/treChest")
public class OpTreChestController {

    @Autowired
    private IOpTreChestService service;

    @PostMapping("/addTc.do")//添加宝箱活动信息
    public CommonResult<String> addTreChest(@RequestBody @Valid OpTreChestInfoBo opTreChestInfoBo) {
        Boolean aBoolean = service.addTreChest(opTreChestInfoBo);
        if (!aBoolean) {
            return CommonResult.error("添加失败");
        }
        return CommonResult.ok("添加成功");
    }

    @PostMapping("/{pageNo}/{pageSize}/pageTC.do")//查询宝箱活动
    public CommonResult<IPage<OpTreChestInfoVo>> queryTreChestByPage(@RequestBody @Valid PageBo pageBo, @PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize) {
        //调用查询宝箱活动接口
        IPage<OpTreChestInfoVo> opTreChestInfoVoIPage = service.queryTreChestByPage(pageBo.getKeyword(), pageBo.getStatus(), pageNo, pageSize);
        CommonResult<IPage<OpTreChestInfoVo>> data = CommonResult.data(opTreChestInfoVoIPage);
        return data;
    }

    @GetMapping("/{id}/startTC.do")//启用宝箱活动
    public CommonResult<String> startTreChest(@PathVariable("id") String id) {
        //调用启用宝箱活动接口
        Boolean aBoolean = service.startTreChest(id);
        if (!aBoolean) {
            return CommonResult.error("启用失败");
        }
        return CommonResult.ok("启用成功");
    }

    @GetMapping("/{id}/stopTC.do")//停用宝箱活动
    public CommonResult<String> stopTreChest(@PathVariable("id") String id) {
        //调用启用宝箱活动接口
        Boolean aBoolean = service.stopTreChest(id);
        if (!aBoolean) {
            return CommonResult.error("停用失败");
        }
        return CommonResult.ok("停用成功");
    }

    @GetMapping("/{id}/getTC.do")//查看宝箱活动详情
    public CommonResult<OpTreChestInfoVo> getTreChest(@PathVariable("id") String id) {
        //调用查看宝箱活动详情接口
        OpTreChestInfoVo treChest = service.getTreChest(id);
        CommonResult<OpTreChestInfoVo> data = CommonResult.data(treChest);
        return data;
    }

    @GetMapping("/{id}/delTC.do")//删除宝箱活动
    public CommonResult<String> delTreChest(@PathVariable("id") String id) {
        //调用启用宝箱活动接口
        Boolean aBoolean = service.delTreChest(id);
        if (!aBoolean) {
            return CommonResult.error("删除失败");
        }
        return CommonResult.ok("删除成功");
    }

    @PostMapping("/updateTC.do")//编辑宝箱活动
    public CommonResult<String> updateTreChest(@RequestBody @Valid OpTreChestInfoBo opTreChestInfoBo) {
        //调用编辑宝箱活动接口
        Boolean aBoolean = service.updateTreChest(opTreChestInfoBo);
        if (!aBoolean) {
            return CommonResult.error("编辑失败");
        }
        return CommonResult.ok("编辑成功");
    }

    @GetMapping("/{treId}/inteDrawTC.do")//积分抽奖
    public CommonResult<DcNftCertVo> inteTreChest(@PathVariable("treId") String treId) {
        //获取当前C端登录用户信息
        SaBaseClientLoginUser clientLoginUser = StpClientLoginUserUtil.getClientLoginUser();
        //获取用户标识
        String mbId = clientLoginUser.getId();
        //调用积分抽奖接口功能
        DcNftCertVo dcNftCertVo = service.inteTreChest(mbId, treId);
        CommonResult<DcNftCertVo> data = CommonResult.data(dcNftCertVo);
        return data;
    }

    @PostMapping("/{treId}/nftDrawTC.do")//藏品抽奖
    public CommonResult<DcNftCertVo> nftTreChest(@RequestBody @Valid List<DcNftCertBo> dcNftCertBos, @PathVariable String treId) {
        //获取当前C端登录用户信息
        SaBaseClientLoginUser clientLoginUser = StpClientLoginUserUtil.getClientLoginUser();
        //获取用户标识
        String mbId = clientLoginUser.getId();
        //调用藏品抽奖接口功能
        DcNftCertVo dcNftCertVo = service.nftTreChest(dcNftCertBos, mbId, treId);
        CommonResult<DcNftCertVo> data = CommonResult.data(dcNftCertVo);
        return data;
    }

    @GetMapping("/{treId}/getTCLog.do")//查看抽奖记录
    public CommonResult<List<OpTreChestLogVo>> getTreChestLog(@PathVariable("treId") String treId) {
        //获取当前C端登录用户信息
        SaBaseClientLoginUser clientLoginUser = StpClientLoginUserUtil.getClientLoginUser();
        //获取用户标识
        String mbId = clientLoginUser.getId();
        //调用查看抽奖记录接口功能
        List<OpTreChestLogVo> treChestLog = service.getTreChestLog(treId, mbId);
        CommonResult<List<OpTreChestLogVo>> data = CommonResult.data(treChestLog);
        return data;
    }

    @PostMapping("/{pageNo}/{pageSize}/getRecord.do")//运营人员查询活动抽奖记录
    public CommonResult<Page<OpTreChestOpRemarkVo>> getOpTreChestLog(@PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize, @RequestBody @Valid PageBo pageBo) {
        //调用运营人员查询活动抽奖记录接口
        Page<OpTreChestOpRemarkVo> opTreChestOpRemarkVoPage = service.queryDrawLog(pageBo.getKeyword(), pageBo.getTreId(), pageNo, pageSize);
        CommonResult<Page<OpTreChestOpRemarkVo>> data = CommonResult.data(opTreChestOpRemarkVoPage);
        return data;
    }
}